home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_09
/
9n09068a
< prev
next >
Wrap
Text File
|
1991-07-08
|
9KB
|
290 lines
/******************************************************
* Listing 1 hc_api.c
*
* Functions to handle calls to HLLAPI.
*
*****************************************************/
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include "hc.h"
/*****************************************************
*
* connect_ps() Connect presentation space.
* Uses the PSID.
* return: 0 = successful
* 1 = invalid PSID
* 4 = successful, but host busy
* 5 = successful, but input inhibited
* 9 = system error
* 11= resource unavailable
* (only under IBM Entry Level Emulator)
*
*****************************************************/
int connect_ps (void)
{
char *api_str = "A"; /* IBM PC/3270 */
int api_len = 1; /* 1 is implied */
int api_retc = 0; /* return code */
int api_func = 1; /* connect pres space */
if (hllapi_level >=4)
return (0); /* simulated */
else if (hllapi_level == 1)
*api_str = 'E'; /* IBM Entry Level */
else if (hllapi_level == 2)
*api_str = 'B'; /* Attachmate */
else if (hllapi_level == 3)
*api_str='1'; /* RabbitGATE */
HLLC(&api_func, api_str, &api_len, &api_retc);
return(api_retc);
}
/*****************************************************
*
* send_key() Send a string of keystrokes to the host
*
* return: 0 = successful
* 1 = not connected to a host session
* 2 = invalid parameter passed to HLLAPI
* 4 = host busy, not all keystrokes sent
* 5 = input inhibited or rejected
* 9 = system error
*
*****************************************************/
int send_key (char *keys)
{
int api_len; /* no. chars to send */
int api_retc = 0; /* return coded */
int api_func = 3; /* send key */
if (hllapi_level >=4) return (0);
api_len = strlen(keys);
HLLC(&api_func, keys, &api_len, &api_retc);
return(api_retc);
}
/*****************************************************
*
* copy_ps() Copy presentation space to ps.
*
* return: 0 = successful
* 1 = not connected to a host session
* 4 = successful, waiting for host response
* 5 = successful, keyboard is locked
* 9 = system error
*
*****************************************************/
int copy_ps (char *ps)
{
int api_len = 0; /* length implied */
int api_retc = 0; /* return code */
int api_func = 5; /* copy pres space */
if (hllapi_level >=4) return (0);
HLLC(&api_func, ps, &api_len, &api_retc);
return(api_retc);
}
/*****************************************************
*
* search_ps() Search presentation space for first
* occurance of str.
*
* If str_pos == 0, string not found, otherwise,
* str_pos is the offset of the string in the pres.
* space. First position in the pres. space is 1; not
* the C convention of 0.
*
* return: 0 = successful
* 1 = not connected to a host session
* 2 = error in specifying parameters
* 9 = system error
*
*****************************************************/
int search_ps(char *str, int *str_pos)
{
int api_func = 6; /* search pres. space */
/* api_len contains length of search string on
* call; and position of string on return
*/
int api_len;
int api_retc = 0; /* return code */
if (hllapi_level >=4) {
*str_pos = 0;
return (0);
}
api_len = strlen(str);
HLLC(&api_func, str, &api_len, &api_retc);
/* 0 and 24 indicate successful execution of
* function
*/
if (api_retc == 0 || api_retc == 24) {
*str_pos = api_len;
return(0);
}
return(api_retc);
}
/*****************************************************
*
* reset() Reset host connection and disconnect
* presentation space.
*
* return: 0 = successful
* 9 = system error
*
*****************************************************/
int reset(void)
{
char *api_str = ""; /* not required */
int api_len = 0; /* not required */
int api_retc = 0; /* return code */
int api_func = 21; /* reset system */
if (hllapi_level >=4) return (0);
HLLC(&api_func, api_str, &api_len, &api_retc);
return(api_retc);
}
/*****************************************************
*
* wait() Wait until host is not busy, i.e., the
* communication line is clear.
*
* return: 0 = system ready for input
* 1 = not connected to a host session
* 4 = timeout while waiting, system not ready
* (1 minute by default)
* 5 = keyboard locked
* 9 = system error
*
*****************************************************/
int wait (void)
{
char *api_str = ""; /* not required */
int api_len = 0; /* not required */
int api_retc = 0; /* return code */
int api_func = 4; /* wait */
if (hllapi_level >=4) return (0);
HLLC(&api_func, api_str, &api_len, &api_retc);
return(api_retc);
}
/*****************************************************
*
* dspy_cursor() Determine cursor position and display.
*
* Uses 2 HLLAPI calls: query cursor location (7) and
* convert cursor position (99). Function 99 uses
* the PSID.
*
* return: 0 = successful
* 1 = session not connected
* 2 = invalid PSID or data string
* 9 = system error encountered
*
*****************************************************/
int dspy_cursor (void)
{
/* query cursor location */
char api_str[3] = ""; /* not req for func 7;
* req for 99 */
int api_len = 0; /* not required */
int api_retc = 0; /* return code */
int api_func = 7; /* query cursor loc */
if (hllapi_level >=4) return (0);
HLLC(&api_func, api_str, &api_len, &api_retc);
if (api_retc != 0)
return(api_retc);
/* Convert cursor positon to row/column. For
* function 99 the data string consists of
* the PSID and the letter P when converting
* from host pres space to row/column
*/
if (hllapi_level == 0)
strcpy(api_str, "AP"); /* IBM PC/3270 */
else if (hllapi_level == 1)
strcpy(api_str, "EP"); /* IBM Entry */
else if (hllapi_level == 2)
strcpy(api_str, "BP"); /* Attachmate */
else
strcpy(api_str, "1P"); /* RabbitGATE */
api_func = 99; /* Convert position */
api_retc = api_len; /* host pres. position
* passed in 4th parm
*/
HLLC(&api_func, api_str, &api_len, &api_retc);
switch (api_retc) {
case 0: /* bad column or PS psn */
case 9998: /* bad PSID or not con'd */
case 9999:/* 2nd char not P or R */
return (2);
default:
gotoxy(api_retc, api_len);
}
return (0);
}
/*****************************************************
*
* copy_oia() Copy the Operator Information Area to
* api_str.
*
* Function must be called with pointer to at least
* 103 bytes--the length of the returned string.
*
* 0 = successful
* 1 = not connected to a host session
* 4 = host busy
* 5 = keyboard locked
* 9 = system error
*
*